// 1.引入 axios  vue  qs
import Vue from "vue"
import axios from "axios"
import qs from "qs"
const vm = new Vue()
import {
    delay
} from "../utils/dounce.js"
import router from "../router/index"


// 2.后端服务地址：
let baseURL = ""
if (process.env.NODE_ENV == "development") {
    // baseURL = "http://localhost:3000"
    baseURL = "http://localhost:3000"
} else {
    baseURL = "http://localhost:3000"
}

Vue.prototype.$pre = baseURL

const http = axios.create({
    baseURL
})


// 3.设置axios请求拦截
http.interceptors.request.use(async (config) => {
    // 弹起数据加载提示
    vm.$toast.loading({
        message: '玩命加载中...',
        duration: 0
    });
    // 延迟执行请求
    await delay(1000)
    // 添加token
    let memberInfo = localStorage.getItem('memberInfo') || ""
    if (memberInfo != "") {
        config.headers.Authorization = JSON.parse(memberInfo).data.list.token
    }
    return config
})

// 4.设置axios响应拦截
http.interceptors.response.use((res) => {
    // 请求结束关闭弹窗
    vm.$toast.clear()
    // 根据不同的相应状态码进行不同处理
    if (res.data.code == 200) {
        return Promise.resolve(res)
    } else if (res.data.code == 403) {
        // 登录过期 访问后端接口地址不对 
        localStorage.removeItem('memberInfo')
        vm.$notify({
            type: 'warning',
            message: '请登录！'
        });
        router.push('/login')
    } else if (res.data.code == 500) {
        return Promise.reject(res.data)
    }
})


/**
 * 5.封装get请求方法
 * data:{
 *      url:"请求地址"
 *      params:{请求参数}
 * }
 * return:返回一个promise对象
 */
export const getData = (url, params) => {
    // 返回是一个promise对象
    return http.get(url, {
        params
    })
}

/**
 * 5.封装post请求方法
 * data:{
 *      url:"请求地址"
 *      params:{请求参数}
 *      isFile:bool 是否有文件上传
 * }
 * return:返回一个promise对象
 */
export const postData = (url, params, isFile = false) => {

    let data = null;
    if (isFile) {
        // 1.有文件上传 FormData  mutiparty/form-data...
        data = new FormData()
        for (let key in params) {
            data.append(key, params[key])
        }
    } else {
        // 2.无文件上传 qs x-www-form-url....
        data = qs.stringify(params)
    }

    // 返回是一个promise对象
    return http.post(url, data)
}